package com.example.vo;

import com.example.commons.SysConstant;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author 游家纨绔
 * @dateTime 2023-09-09 22:00
 * @apiNote TODO 包装返回信息
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BaseResult {

	// 返回的时间
	private final long timestamp = System.currentTimeMillis();
	// 返回的状态码
	private int status;
	// 返回消息
	private String message;
	// 返回数据
	private Object result;

	// 返回成功的方法,不带数据
	public static BaseResult success() {
		return BaseResult.builder().status(SysConstant.STATUS_SUCCESS).message(SysConstant.SUCCESS_MESSAGE).build();
	}

	// 返回成功的方法,带数据
	public static BaseResult success(Object result) {
		return BaseResult.builder().status(SysConstant.STATUS_SUCCESS).message(SysConstant.SUCCESS_MESSAGE).result(result).build();
	}

	// 返回成功的方法,带数据带消息
	public static BaseResult success(Object result, String message) {
		return BaseResult.builder().status(SysConstant.STATUS_SUCCESS).message(message).result(result).build();
	}

	// 返回失败的方法,不带数据
	public static BaseResult fail() {
		return BaseResult.builder().status(SysConstant.STATUS_FAIL).message(SysConstant.FAIL_MESSAGE).build();
	}

	// 返回失败的方法,带数据
	public static BaseResult fail(Object result) {
		return BaseResult.builder().status(SysConstant.STATUS_FAIL).message(SysConstant.FAIL_MESSAGE).result(result).build();
	}

	// 返回失败的方法,带数据带消息
	public static BaseResult fail(Object result, String message) {
		return BaseResult.builder().status(SysConstant.STATUS_FAIL).message(message).result(result).build();
	}
}
